using UnityEngine;
using System.Collections;

public class SoundManager : MonoBehaviour
{
    public static SoundManager Instance;

    AudioSource[] mAudios;

    void Awake()
    {
        Instance = this;
        mAudios = GetComponentsInChildren<AudioSource>();
    }

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="name"></param>
    /// <param name="considerIsPlaying">Considera si el sonido ya esta en play. Si esta opcion esta en true el sonido no se vuelve a ejecutar.
    /// False por default.</param>
    public void PlaySound(string name,bool considerIsPlaying = false)
    {
        AudioSource tempAudio;
        if ((tempAudio = GetSound(name)) == null)
            return;
        if(considerIsPlaying == false ||tempAudio.isPlaying == false) 
        tempAudio.Play();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="name"></param>
    /// <param name="position">Posicion 3D del sonido, solo afecta a los sonidos marcados como 3D en el editor.</param>
    /// <param name="considerIsPlaying">Considera si el sonido ya esta en play. Si esta opcion esta en true el sonido no se vuelve a ejecutar.
    /// False por default.</param>
    public void PlaySound(string name, Vector3 position, bool considerIsPlaying = false)
    {
        AudioSource tempAudio;
        if ((tempAudio = GetSound(name)) == null)
            return;

        tempAudio.transform.position = position;
        if(considerIsPlaying == false ||tempAudio.isPlaying == false) 
        tempAudio.Play();
    }

    public void StopSound(string name)
    {
        AudioSource tempAudio;
        if ((tempAudio = GetSound(name)) == null)
            return;

        tempAudio.Stop();
    }

    /// <summary>
    /// Busca un sonido.
    /// </summary>
    /// <param name="name"></param>
    /// <returns>Devuelve null si no existe.</returns>
    AudioSource GetSound(string name)
    {
        AudioSource tempAudio = null;

        foreach (var audio in mAudios)
        {
            if (audio.name == name)
            {
                tempAudio = audio;
                break;
            }
        }
        return tempAudio;
    }
}